package com.bw.aop;

import com.alibaba.fastjson.JSON;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

//@Component//该注解的作用将这个对象加入到spring容器管理
//@Aspect//当前类标识为一个切面
public class MyAdvice {

    //标识一个前置增强方法 在真正的方法执行之前运行

    /**
     * 前置通知
     * 切入点表达式：用来匹配方法   匹配到的对象  会自动产生一个代理对象
     * 从容器中获取对象时，拿到的是代理对象
     */
    @Before("execution(* com.bw.service.*.*(..))")
    public void beforeTodo(JoinPoint point) {
        //dgdgdf
        String name = point.getSignature().getName();
        Object[] args = point.getArgs();
        System.out.println("----@Before 方法名------" + name);
        System.out.println("----@Before 入参------" + JSON.toJSONString(args));
    }

    //后置通知  增强，方法正常退出时执行
    @AfterReturning(value = "execution(* com.bw.service.*.*(..))",returning = "obj")
    public void afterRunning(Object obj) {
        System.out.println("----@AfterReturning 返参是------" + JSON.toJSONString(obj));
    }


}
